AddCSLuaFile("cl_init.lua")
AddCSLuaFile("shared.lua")
include("shared.lua")

ENT.WireDebugName = "No Name"
function ENT:Think()
	if(not Wire_DisableOverlayTextUpdate and self.NextOverlayTextTime and CurTime() >= self.NextOverlayTextTime) then
		if(self.NextOverlayText) then
			//self.BaseClass.BaseClass.SetOverlayText(self, self.NextOverlayText)
			self.Entity:SetNetworkedBeamString("GModOverlayText",self.NextOverlayText)
			self.NextOverlayText = nil
			self.NextOverlayTextTime = CurTime() + (self.OverlayDelay or 0.4) + math.random()*(self.OverlayRandom or 0.2)
			if(Wire_SlowerOverlayTextUpdate) then
				self.NextOverlayTextTime = self.NextOverlayTextTime + 1 //add a sec between updates
			end
		else
			self.NextOverlayText = nil
			self.NextOverlayTextTime = nil
		end
	end
end

function ENT:SetOverlayText(txt)
	if(Wire_DisableOverlayTextUpdate) then return end
	if(Wire_FastOverlayTextUpdate) then
		self.Entity:SetNetworkedBeamString("GModOverlayText",txt,true) //send it now, damn it!
	else
		if(self.NextOverlayTextTime) then
			self.NextOverlayText = txt
		else
			self.Entity:SetNetworkedBeamString("GModOverlayText",txt)
			self.NextOverlayText = nil
			if(not self.OverlayDelay or self.OverlayDelay > 0 or Wire_SlowerOverlayTextUpdate or  not SinglePlayer() or Wire_ForceDelayOverlayTextUpdate) then
				self.NextOverlayTextTime = CurTime() + (self.OverlayDelay or 0.6) + math.random()*(self.OverlayRandom or 0.2)
			end
		end
	end
end

function ENT:OnRemove()
	Wire_Remove(self.Entity)
end

function ENT:OnRestore()
    Wire_Restored(self.Entity)
end

function ENT:BuildDupeInfo()
	return WireLib.BuildDupeInfo(self.Entity)
end

function ENT:ApplyDupeInfo(ply, ent, info, GetEntByID)
	WireLib.ApplyDupeInfo( ply, ent, info, GetEntByID )
end

function ENT:PreEntityCopy()
	//build the DupeInfo table and save it as an entity mod
	local DupeInfo = self:BuildDupeInfo()
	if(DupeInfo) then
		duplicator.StoreEntityModifier(self.Entity,"WireDupeInfo",DupeInfo)
	end
end

function ENT:PostEntityPaste(Player,Ent,CreatedEntities)
	//apply the DupeInfo
	if(Ent.EntityMods and Ent.EntityMods.WireDupeInfo) then
		Ent:ApplyDupeInfo(Player, Ent, Ent.EntityMods.WireDupeInfo, function(id) return CreatedEntities[id] end)
	end
end
